package com.yf.gc;

/**
 * 测试引用计数算法不能解决循环引用问题
 * 证明java没有使用引用计数算法
 */
public class RefCountGC {
    // 这个成员变量唯一的作用就是占用一占内存
    private byte[] bigSize = new byte[5 * 1024 * 1024]; // 5MB
    Object ref = null;

    public static void main(String[] args) {
        RefCountGC o1 = new RefCountGC();
        RefCountGC o2 = new RefCountGC();
        // 此处设置循环引用
        o1.ref = o2;
        o2.ref = o1;
        // o1,o2内部的ref指彼此，如果使用引用计数算法，此时o1,o2的引用计数器值都为1，并不能清零，会导致o1,o2无法被回收
        o1 = null;
        o2 = null;

        // 显式地执行垃圾回收行为
        // 这里发生GC， o1和o2能否被回收？
        System.gc();
    }
}
